import Vue from 'vue'
import Vuex from 'vuex'
import { getItem, setItem, removeItem } from '@/utils/storage.js'
Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    // tokenInfo: {}
    // 保存公共数据
    // 在tokenInfo中保存token和refresh_token

    // tokenInfo的值是先从本地存储中取，取不到就用{}
    tokenInfo: getItem('tokenInfo') || {},
    // 保存用户的三个信息：id,name,photo
    userInfo: getItem('userInfo') || {}
  },
  mutations: {
    // 设置mutation来更新用户信息userInfo
    mSetUserInfo (state, userObj) {
      // 1.保存道vuex
      state.userInfo = userObj
      // 2.做持久化 --保存到localstorage
      setItem('userInfo', userObj)
    },
    // 设置mutation来更新用户信息userInfo
    mSetUserPhoto (state, photo) {
      // 1.保存道vuex
      state.userInfo.photo = photo
      // 2.做持久化 --保存到localstorage
      setItem('userInfo', state.userInfo)
    },
    // 设置mutation来更新tokenInfo
    mSetTokenInfo (state, tokenObj) {
      state.tokenInfo = tokenObj
      // 把token信息持久化到localstorage中
      setItem('tokenInfo', tokenObj)
    },
    // 退出登录
    mClearTokenInfo (state) {
      // 1. 保存到vuex
      state.tokenInfo = {}
      // 2. 做持久化 -- 保存到localstorage
      removeItem('tokenInfo')
    }
  },
  // 它相当于计算属性
  // 基于state中的数据产生新的数据项
  // 方便保存token 令$store.getters.isLogin = $store.state.tokenInfo.token
  getters: {
    // 是否登录了
    isLogin (state) {
      if (state.tokenInfo.token) {
        return true
      } else {
        return false
      }
    }
  },
  actions: {
  },
  modules: {
  }
})
